<?php
namespace Exam\Object;

use Exam\Controller\ExampaperController;
use Exam\Model\PlanModel;
use Tsy\Library\Object;
/**
 * 考试记录
 * 主观题是否评分
 * @package Exam\Object
 */
class TesthistoryObject extends Object
{
    
    /**

     * 考试记录编号 KJID int(11) 自增 主键 必填  
     * 试卷编号 SID int(11)   必填
     * 用户编号 UID int(11)   必填  
     * 考试开始时间 STime datetime     
     * 考试结束时间 ETime datetime     
     * 试卷状态 Status int(11)   必填  主观题是否评分
     */
    /**
     * @var string
     */
    protected $main='Testhistory';
    protected $pk='KJID';
    public $addFields=['SID','UID','STime','ETime','Status'];//允许添加的字段，如果数组最后一个元素值为true则表示排除
    public $saveFields=['SID','UID','STime','ETime','Status'];//允许修改的字段，如果数组最后一个元素值为true则表示排除
    public $addFieldsConfig=[
    
//      'SID'=>[//字段名称:试卷编号,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 试卷编号(SID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 试卷编号(SID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 试卷编号(SID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 试卷编号(SID) 的值是否存在，取该值或该函数的值
//      ],

//      'FID'=>[//字段名称:方案编号,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 方案编号(FID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 方案编号(FID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 方案编号(FID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 方案编号(FID) 的值是否存在，取该值或该函数的值
//      ],

//      'UID'=>[//字段名称:用户编号,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 用户编号(UID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 用户编号(UID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 用户编号(UID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 用户编号(UID) 的值是否存在，取该值或该函数的值
//      ],

//      'STime'=>[//字段名称:考试开始时间,数据类型:datetime,注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 考试开始时间(STime) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 考试开始时间(STime) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 考试开始时间(STime) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 考试开始时间(STime) 的值是否存在，取该值或该函数的值
//      ],

//      'ETime'=>[//字段名称:考试结束时间,数据类型:datetime,注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 考试结束时间(ETime) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 考试结束时间(ETime) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 考试结束时间(ETime) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 考试结束时间(ETime) 的值是否存在，取该值或该函数的值
//      ],

//      'Status'=>[//字段名称:试卷状态,数据类型:int(11),注释:主观题是否评分
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 试卷状态(Status) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 试卷状态(Status) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 试卷状态(Status) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 试卷状态(Status) 的值是否存在，取该值或该函数的值
//      ]
    ];
    public $saveFieldsConfig=[
    
//      'SID'=>[//字段名称:试卷编号,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 试卷编号(SID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 试卷编号(SID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 试卷编号(SID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 试卷编号(SID) 的值是否存在，取该值或该函数的值
//      ],

//      'FID'=>[//字段名称:方案编号,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 方案编号(FID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 方案编号(FID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 方案编号(FID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 方案编号(FID) 的值是否存在，取该值或该函数的值
//      ],

//      'UID'=>[//字段名称:用户编号,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 用户编号(UID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 用户编号(UID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 用户编号(UID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 用户编号(UID) 的值是否存在，取该值或该函数的值
//      ],

//      'STime'=>[//字段名称:考试开始时间,数据类型:datetime,注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 考试开始时间(STime) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 考试开始时间(STime) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 考试开始时间(STime) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 考试开始时间(STime) 的值是否存在，取该值或该函数的值
//      ],

//      'ETime'=>[//字段名称:考试结束时间,数据类型:datetime,注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 考试结束时间(ETime) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 考试结束时间(ETime) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 考试结束时间(ETime) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 考试结束时间(ETime) 的值是否存在，取该值或该函数的值
//      ],

//      'Status'=>[//字段名称:试卷状态,数据类型:int(11),注释:主观题是否评分
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 试卷状态(Status) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 试卷状态(Status) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 试卷状态(Status) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 试卷状态(Status) 的值是否存在，取该值或该函数的值
//      ]
    ];
    protected $property=[
        'Realexam'=>[//试卷编号  试卷  属性
            self::RELATION_TABLE_NAME=>'Realexam',//属性关联表
            self::RELATION_TABLE_COLUMN=>'SID',//关联表中的关联字段
            self::RELATION_MAIN_COLUMN=>'RID',//主笔中的关联字段
            self::RELATION_TABLE_PROPERTY=>self::PROPERTY_ONE_OBJECT,
        ],
        'User'=>[//用户编号  用户  属性
            self::RELATION_TABLE_NAME=>'User',//属性关联表
            self::RELATION_TABLE_COLUMN=>'UID',//关联表中的关联字段
            self::RELATION_MAIN_COLUMN=>'UID',//主笔中的关联字段
            self::RELATION_TABLE_PROPERTY=>self::PROPERTY_ONE_OBJECT,
        ],
        'Answer'=>[//用户编号  用户  属性
            self::RELATION_TABLE_NAME=>'testhistoryquestion',//属性关联表
            self::RELATION_TABLE_COLUMN=>'KJID',//关联表中的关联字段
            self::RELATION_MAIN_COLUMN=>'KJID',//主笔中的关联字段
            self::RELATION_TABLE_PROPERTY=>self::PROPERTY_ARRAY,
        ],


    ];
    protected $link=[
       
    ];
    protected $searchFields=['KJID','SID','FID','UID','STime','ETime','Status'];
    protected $searchTable='Testhistory';
    protected $searchWFieldsConf=[
        'Testhistory'=>'Testhistory',
       ];
    protected $searchWFieldsGroup=[
        'Testhistory'=>['KJID','SID','FID','UID','STime','ETime','Status'],
       ];

    function generateNozsd($SID){
        $temp = new ExampaperObject();
        $sj = $temp->get($SID);
        $Plan = $sj['Plan'];
        $result = [
            'DX'=>[],
            'DDX'=>[],
            'PD'=>[],
            'DT'=>[],
            'ZGT'=>[],
        ];
        $planModel = new PlanModel();
//       $result['单选题'] =
        $question = new QuestionObject();
        //单选题
        if ($Plan['DXnumber']>0){
            $XZ =  $Plan['DXnumber'];
            $result['DX'] =  $planModel->query("SELECT SID FROM question WHERE TTID=2 ORDER BY RAND() LIMIT $XZ");
            if (count($result['DX'])<$XZ){
                $name = '单选题';
                return "题库里面$name 的数量未能达到方案的要求数量。";
            }
            for ($i=0; $i<count($result['DX']); $i++){
                $result['DX'][$i] = $question->get($result['DX'][$i]['SID']);
            }
        }
        //多选题
        if ($Plan['DDXnumber']>0){
            $XZ =  $Plan['DDXnumber'];
            $result['DDX'] =  $planModel->query("SELECT * FROM question WHERE TTID=3 ORDER BY RAND() LIMIT $XZ");

            if (count($result['DDX'])<$XZ){
                $name = '多选题';
                return "题库里面$name 的数量未能达到方案的要求数量。";
            }
            for ($i=0; $i<count($result['DDX']); $i++){
                $result['DDX'][$i] = $question->get($result['DDX'][$i]['SID']);
            }
        }
        //判断题
        if ($Plan['PDnumber']>0){
            $XZ =  $Plan['PDnumber'];
            $result['PD'] =  $planModel->query("SELECT * FROM question WHERE TTID=6 ORDER BY RAND() LIMIT $XZ");
            if (count($result['PD'])<$XZ){
                $name = '判断题';
                return "题库里面$name 的数量未能达到方案的要求数量。";
            }

        }

        //主观题
        if ($Plan['ZGnumber']>0){
            $XZ =  $Plan['ZGnumber'];
            $result['PD'] =  $planModel->query("SELECT * FROM question WHERE TTID=7 ORDER BY RAND() LIMIT $XZ");
            if (count($result['PD'])<$XZ){
                $name = '主观题';
                return "题库里面$name 的数量未能达到方案的要求数量。";
            }

        }

        //大题
        if ($Plan['DTnumber']>0){
            $XZ =  $Plan['DTnumber'];
            $result['DT'] =  $planModel->query("SELECT * FROM question WHERE TTID=4 ORDER BY RAND() LIMIT $XZ");
            if (count($result['DT'])<$XZ){
                $name = '大题';
                return "题库里面$name 的数量未能达到方案的要求数量。";
            }
            for ($i=0; $i<count($result['DT']); $i++){
                $result['DT'][$i] = $question->get($result['DT'][$i]['SID']);
                for ($j=0; $j<count($result['DT'][$i]['Question']); $j++){
                    $result['DT'][$i]['Question'][$j] = $question->get($result['DT'][$i]['Question'][$j]['SID']);
                }
            }
        }
        return $result;
    }

    
    function get($ID = false)
    {
        $result = parent::get($ID); // TODO: Change the autogenerated stub
        if (is_array($result)) {
            $kjid = $result['KJID'];
            $score = M('testhistoryquestion')->where("KJID=$kjid AND Score!=-1")->field("sum(Score) as score")->select();
            $result['allScore'] = $score[0]['score'];
        }
        else{
            return $result;
        }
        return $result;
    }

    function search($Keyword = '', $W = [], $Sort = '', $P = 1, $N = 20, $Properties = false, $Group = false, $Fields = false, $R = false)
    {
        $result =  parent::search($Keyword, $W, $Sort, $P, $N, $Properties, $Group, $Fields, $R); // TODO: Change the autogenerated stub
        for ($i=0; $i<count($result['L']); $i++){
            $KJID =  $result['L'][$i]['KJID'];
            $temp = (M('testhistoryquestion'))->where("KJID=$KJID")->field("sum(Score) as allScore")->find();
            $result['L'][$i]['allScore'] = $temp['allScore'];
        }
        return $result;
    }

}